package com.hibase.upms.service.role;

import com.github.pagehelper.PageInfo;
import com.hibase.core.mybatis.service.BaseService;
import com.hibase.core.web.entity.OperationIdEntity;
import com.hibase.upms.entity.menu.MdsMenu;
import com.hibase.upms.entity.role.MdsRole;
import com.hibase.upms.entity.role.vo.*;

import java.util.List;

/**
 * <p>
 *  服务类
 * </p>
 *
 * @author ChrisCui
 * @since 2019-04-16
 */
public interface MdsRoleService extends BaseService<MdsRole> {

    /**
     * 新增角色
     * @param updateVO
     */
    void changeRole(MdsRoleUpdateVO updateVO);

    /**
     * 角色状态更新（启用停用）
     * @param ids
     * @param recordStatus
     */
    void changeRoleStatus(List<String> ids, boolean recordStatus);

    /**
     * 查询列表
     *
     * @param searchVO
     * @return
     */
    PageInfo<MdsRole> selectList(MdsRoleSearchVO searchVO);

    /**
     * 查询角色绑定用户列表
     *
     * @param idEntity
     * @return
     */
    PageInfo<MdsRoleUserViewVO> selectRoleUserList(OperationIdEntity idEntity);

    /**
     * 查询角色未绑定用户列表
     *
     * @param idEntity
     * @return
     */
    PageInfo<MdsRoleUserViewVO> selectRoleNoUserList(OperationIdEntity idEntity);

    /**
     *
     * @param roleId
     * @param userIds
     */
    void insAndDelRoleUser(String roleId, List<String> userIds);

    /**
     * 移除角色用户
     * @param mdsRoleUserOpVo
     */
    void deleteRoleUser(MdsRoleUserOpVO mdsRoleUserOpVo);

    /**
     * 查询角色菜单列
     *
     * @param idEntity
     * @return
     */
    List<MdsMenu> selectRoleMenuList(OperationIdEntity idEntity);

    /**
     * 新增与移除角色菜单
     * @param mdsRoleMenuOpVo
     */
    void insAndDelRoleMenu(MdsRoleMenuOpVO mdsRoleMenuOpVo);

    void insAndDelRoleMenuByPageConfig(MdsRoleMenuOpVO mdsRoleMenuOpVo);

    /**
     * 刷新权限
     */
    void refreshPermissions();

    /**
     * 查询当前用户下的角色列表(包含所选用户的已拥有角色)
     * @param idEntity
     * @return
     */
    PageInfo selectCurrentUserRoleList(OperationIdEntity idEntity);
}
